#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "stm32f10x.h"
#include "bluetooth.h"
#include "hardware.h"
#include "tick.h"

void BluetoothCtrlIOInit(void) {
	GPIO_InitTypeDef GPIO_InitStructure;
	
	// HC-05 Reset Pin
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = BLUETOOTH_RESET_PIN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(BLUETOOTH_CTRL_PORT, &GPIO_InitStructure);
	
	// HC-05 Command Pin
	GPIO_InitStructure.GPIO_Pin = BLUETOOTH_MODE_PIN;
	GPIO_Init(BLUETOOTH_CTRL_PORT, &GPIO_InitStructure);
}

void BluetoothReset(int Millisecond) {
	GPIO_ResetBits(BLUETOOTH_CTRL_PORT, BLUETOOTH_RESET_PIN);
	if(Millisecond != -1) {
		delay_ms(Millisecond);
		GPIO_SetBits(BLUETOOTH_CTRL_PORT, BLUETOOTH_RESET_PIN);
	}
}

void BluetoothSet(void) {
	GPIO_SetBits(BLUETOOTH_CTRL_PORT, BLUETOOTH_RESET_PIN);
}

void BluetoothATMode(void) {
	GPIO_InitTypeDef GPIO_InitStructure;
	
	// Set TXD and RXD pin as input
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Pin = USART1_RXD_PIN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(USART1_PORT, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = USART1_TXD_PIN;
	GPIO_Init(USART1_PORT, &GPIO_InitStructure);
	
	GPIO_SetBits(BLUETOOTH_CTRL_PORT, BLUETOOTH_MODE_PIN);
}

void BluetoothNormalMode(void) {
	GPIO_InitTypeDef GPIO_InitStructure;
	
	// Set TXD output and RXD input
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Pin = USART1_RXD_PIN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(USART1_PORT, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = USART1_TXD_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(USART1_PORT, &GPIO_InitStructure);
	
	GPIO_ResetBits(BLUETOOTH_CTRL_PORT, BLUETOOTH_MODE_PIN);
}
